package com.alks.function.service.stockdept.pcfactorystockquery;

import com.alks.entity.data.entity.PcCuttingCollectDetail;
import com.alks.entity.data.response.ResponseInfo;
import com.alks.function.data.dto.biocontrol.webwork.RecIoBatchRequest;
import com.alks.function.data.request.factoryquery.CuttingPartRequest;
import com.alks.function.data.request.stockdept.pcfactorystockwork.CuttingRceIoBackRequest;
import com.alks.function.data.request.stockdept.pcfactorystockwork.CuttingRecDetRequest;
import com.alks.function.data.request.stockdept.pcfactorystockwork.CuttingRecIoRequest;
import com.alks.function.data.request.stockdept.pcfactorystockwork.CuttingRecTempRequest;
import com.alks.function.data.vo.controller.stockdept.DeptProcNumVo;

import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * @author MS
 * @since 2024/6/28下午5:04
 */
public interface ICuttingRecService {
    /**
     * 冲裁查询-可条件分页查询
     *
     * @param request 查询条件
     * @param lotNo   指令
     * @return 收发数据
     */
    ResponseInfo cuttingRecTempQuery(CuttingRecTempRequest request, String lotNo);

    /**
     * 冲裁收发明细查询-条件分页查询
     * @param request 查询条件
     * @param processCode 工艺类型
     * @return 收发明细数据
     */
    ResponseInfo cuttingRecDetQuery(CuttingRecDetRequest request, String processCode);

    /**
     * 日期总览-条件查询
     * @param date 日期
     * @param processCode 工艺类型
     * @return 日期总览数据
     */
    ResponseInfo cuttingInDateQuery(LocalDateTime date, String processCode);

    /**
     * 配套收发回显-回显
     * @return 收发类型
     */
    ResponseInfo cuttingRecDetBack();

    /**
     * 配套收发表单回显-回显
     * @param request 查询条件
     * @param processCode 工艺类型
     * @return 收发基础数据
     */
    ResponseInfo cuttingRecIoTempBack(CuttingRceIoBackRequest request, String processCode);

    /**
     * 冲裁收发表单回显-回显
     *
     * @param request 查询条件
     * @param processCode 工艺类型
     * @return 收发基础数据
     */
    ResponseInfo cuttingRecIoBack(CuttingRceIoBackRequest request, String processCode);

    /**
     * 冲裁收发-新增
     *
     * @param request     定位数据
     * @param processCode 工艺类型
     * @param language
     * @return 新增结果
     */
    ResponseInfo cuttingRecDetIo(@Valid List<CuttingRecIoRequest> request, String processCode, String language);

    /**
     * 冲裁收发删除-删除
     * @param request 定位数据
     * @param processCode 工艺类型
     * @return 删除结果
     */
    ResponseInfo cuttingRecDetDelete(PcCuttingCollectDetail request, String processCode);

    /**
     * 冲裁收发查询-扫码查询
     *
     * @param labelNo     条码
     * @param processName 工艺类型
     * @param flag
     * @param language
     * @return 查询结果
     */
    ResponseInfo cuttingScanCodeQuery(String labelNo, String processName, String flag, String language);

    /**
     * 冲裁收发指令明细查询-条件查询
     *
     * @param request  查询条件
     * @param language
     * @return 查询结果
     */
    ResponseInfo cuttingScanLotNoQuery(CuttingPartRequest request, String language);

    /**
     * 指定时间各部门产量查询(暂时只有收料数据)
     * @param start 起始时间
     * @param end 结束时间
     * @return 各部门产量数据
     */
    List<DeptProcNumVo> getProdNumByDate(LocalDateTime start, LocalDateTime end);

    /**
     * 配套收发批次查询
     * @param request 查询条件
     * @param processCode 工艺类型
     * @return 批次数据
     */
    List<Map<String, Object>> batchQuery(RecIoBatchRequest request, String processCode);
}
